/**
 * 对log4js的一些封装
 * Created by jude on 2016/1/11.
 */
var log4js = require('log4js');
//var fs = require("fs");
//var path = require("path");

// 包含logger打印的一些方法，对外暴露
var helper = {};
exports.helper = helper;

//// 加载配置文件
//var objConfig = JSON.parse(fs.readFileSync("log4js.json", "utf8"));
var log4jsConfig = require('../config/log4js');

//先创建配置中目录，才可加载配置，不然会出异常
log4js.configure(log4jsConfig);

var logDebug = log4js.getLogger('log_debug');
// 普通日志
var logInfo = log4js.getLogger('log_info');
// 错误日志
var logError = log4js.getLogger('log_error');
// 统计日志
var logStat = log4js.getLogger('log_stat');
// 业务日志
var logTodo = log4js.getLogger('log_todo');

/**
 * debug日志
 * @param msg 日志信息
 * @param level 日志级别
 */
helper.writeLogDebug = function(msg){
    logDebug(logDebug, msg, level);
};

/**
 * 记录普通日志
 * @param msg 日志信息
 * @param level 日志级别
 */
helper.writeLogInfo = function(msg, level){
    logWriter(logInfo, msg, level);
};

/**
 * 记录错误日志
 * @param msg 日志信息
 */
helper.writeLogError = function(msg){
    logWriter(logError, msg, 'ERROR');
};

/**
 * 记录统计日志
 * @param msg 日志信息
 * @param level 日志级别
 */
helper.writeLogStat = function(msg, level){
    logWriter(logStat, msg, level);
};

/**
 * 记录人工业务日志
 * @param msg 日志信息
 * @param level 日志级别
 */
helper.writeLogTodo = function(msg, level){
    logWriter(logTodo, msg, level);
};

// 配合express用的方法
exports.use = function(app) {
    //页面请求日志, level用auto时,默认级别是WARN
    // 添加到middleware
    app.use(log4js.connectLogger(logInfo, { level: 'auto', format:':method :status :url' }));
}


// 写入log
function logWriter(logger, msg, level) {
    if(!msg)
        msg = "";

    if(typeof level === 'string')
        level = level.toUpperCase();

    switch (level) {
        case 'DEBUG' :
            logger.debug(msg);
            break;
        case 'INFO' :
            logger.info(msg);
            break;
        case 'WARN' :
            logger.warn(msg);
            break;
        case 'ERROR' :
            logger.error(msg);
            break;
        default :
            logger.info(msg);
            break;
    }
}

// 判断日志目录是否存在，不存在时创建日志目录
function checkAndCreateDir(dir){
    if(!fs.existsSync(dir)){
        fs.mkdirSync(dir);
    }
}

// 指定的字符串是否绝对路径
function isAbsoluteDir(path){
    if(path == null)
        return false;
    var len = path.length;

    var isWindows = process.platform === 'win32';
    if(isWindows){
        if(len <= 1)
            return false;
        return path[1] == ":";
    }else{
        if(len <= 0)
            return false;
        return path[0] == "/";
    }
}